/**
 ******************************************************************************
 * @file           : bsp_wwdg.h
 * @brief          : WWDG Driver Header File (STM32F4xx)
 ******************************************************************************
 * @attention
 *
 * 窗口看门狗驱动程序头文件
 * 提供 WWDG 初始化、喂狗、状态查询等功能
 * 与 IWDG 独立看门狗互补，适用于需要精确喂狗时间窗口的场景
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_WWDG_H
#define __BSP_WWDG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include "./BSP/WWDG/bsp_wwdg_config.h"

/* Exported types ------------------------------------------------------------*/

/**
 * @brief WWDG错误码枚举
 */
typedef enum
{
    WWDG_OK = 0,                    /*!< 成功 */
    WWDG_ERROR_PARAM,               /*!< 参数错误 */
    WWDG_ERROR_INIT,                /*!< 初始化失败 */
    WWDG_ERROR_TOO_EARLY,           /*!< 喂狗过早（在窗口之外） */
    WWDG_ERROR_NOT_INIT             /*!< 未初始化 */
} WWDG_Error_e;

/**
 * @brief WWDG状态枚举
 */
typedef enum
{
    WWDG_STATE_RESET = 0,           /*!< 复位状态 */
    WWDG_STATE_READY,               /*!< 就绪状态 */
    WWDG_STATE_BUSY,                /*!< 忙状态 */
    WWDG_STATE_ERROR                /*!< 错误状态 */
} WWDG_State_e;

/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/* 初始化函数 */
void wwdg_init(void);                   /* WWDG初始化 */
void wwdg_deinit(void);                 /* WWDG反初始化 */

/* 控制函数 */
void wwdg_feed(void);                   /* 喂狗 */
void wwdg_refresh(uint8_t counter);     /* 刷新计数器（指定值） */

/* 状态查询函数 */
WWDG_State_e wwdg_get_state(void);      /* 获取WWDG状态 */
uint8_t wwdg_get_counter(void);         /* 获取当前计数器值 */
uint8_t wwdg_is_initialized(void);      /* 检查是否已初始化 */

/* 信息打印函数 */
void wwdg_print_config(void);           /* 打印WWDG配置信息 */

#ifdef __cplusplus
}
#endif

#endif /* __BSP_WWDG_H */
